<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>预编译例子</title>
</head>
<body>

</body>
<script>
    // 1. 创建AO对象 Activation Object (执行期上下文)
    // 2. 找行参和变量声明, 将变量和行参名作为AO属性名, 值为undefined
    // 3. 将实参指和行参统一
    // 4. 在函数体里面找函数声明,值赋予函数体
    function test(a, b) {
        console.log(a);
        c = 0;
        var c;
        a = 3;
        b = 2;
        console.log(b);
        function b() {}
        function d() {}
        console.log(b);
    }
    test(1);

    // 1: AO{
    //  a : 1;
    //  b : function() {}
    //  c : undefined;
    //  d : function() {}
    // }  预编译
    // 2: AO{
    //  a : 3;
    //  b : 2;
    //  c : 0;
    //  d : function() {}
    // }  执行
    // 1;
    // 2;
    // 2;
</script>
</html>
